列不偏移

问题描述

"\\uXXXX"

您好,我在尝试偏移说明中的列和行时,如果发现它删除了先前测试中的所有上述数据,但是当我偏移它时,该行向上移动,但列未偏移其假定的30。它没有任何错误。我是否需要将字母设置为值才能使其正常工作?谢谢麦克斯

解决方法

  1. 确保使用Option Explicit来检测可变错字。

  2. 确保每个 RangeCellsRowsColums对象都有一个引用为ws.Range的工作表,否则将需要任何处于活动状态的工作表(并且可以通过用户单击轻松更改)。

  3. 您可以在Range.Find method的文档中看到,绝对需要指定以下4个参数或获得随机结果:

    LookInLookAtSearchOrderMatchByte的设置 每次使用此方法时都会保存。如果不指定值 对于这些参数,下次调用该方法时,已保存 使用值。设置这些参数会更改 查找对话框,并更改查找对话框中的设置 如果省略参数,则更改保存的值。至 为避免出现问题,每次使用此参数时都要明确设置这些参数 方法。

    如果不定义这些参数,它可能现在可以正常工作,并再次停止工作。

  4. 使用Find()方法后,请确保测试是否发现了If Not FoundAt Is Nothing Then,否则它将消失。

  5. 您在[ ]中使用的[celladdress][A1]表示法无关,并且不能像您想象的那样工作。它们需要删除!

  6. 声明变量尽可能靠近其首次使用而不是最顶部。否则,您将很容易以Dim v As Integer结尾,而在整个代码中永远不会使用v

  7. 最后使用正确的代码格式和正确的缩进。代码越容易阅读,您将犯的错误越少,调试起来也就越容易。不要像“以后会修复格式” 那样工作。这会减慢您编写好的代码的速度,并且您可能永远都无法修复它。

所以您最终会得到类似的东西:

Option Explicit

Public Sub Example()
    Dim ws As Worksheet
    Set ws = Worksheets("Sheet1") 'define your sheet
     
    Dim LastRow As Long
    LastRow = ws.Cells(ws.Rows.Count,"A").End(xlUp).Offset(1,0).Row

    ws.Cells(LastRow,13).Value = "Sampling"
    ws.Range("C3").Copy ws.Range("C" & LastRow)
    ws.Range("B3").Copy ws.Range("B" & LastRow)
    ws.Range("A3").Copy ws.Range("A" & LastRow)
     
    Dim FoundAt As Range 'define ALL these parameters below to prevent random/wrong results
    Set FoundAt = ws.Range("G3:G1000").Find(What:="Description",LookIn:=xlValues,LookAt:=xlWhole,SearchOrder:=xlByRows,MatchByte:=False)
    
    If Not FoundAt Is Nothing Then 'test if something was found you cannot delete if you found nothing
        Dim CellAddress As String
        CellAddress = FoundAt.Offset(-1,30).Address
        ws.Range("A2",CellAddress).Delete
    Else
        MsgBox "'Description' was not found.",vbCritical
    End If
End Sub
,

采样

  • 有了这么少的信息,我只能想到这个。评论 如果有误解,应该可以帮助您进行更改。

代码

Option Explicit

Sub Sampling()
    
    ' Define worksheet.
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Sheet1")
    
    ' Calculate 'NewRow',the row below last non-blank cell in column "A".
    Dim NewRow As Long
    NewRow = ws.Range("A" & ws.Rows.Count).End(xlUp).Offset(1,0).Row
    
    ' Write "Sampling" in column "M" of 'NewRow'.
    ws.Range("M" & NewRow).Value = "Sampling"
    ' Copy range "A3:C3" to the same columns in 'NewRow'.
    ws.Range("A3:C3").Copy ws.Range("A" & NewRow,"C" & NewRow)

    ' Find the first occurrence of "Description" in column "G"
    ' starting from the 3rd row and ending above 'NewRow'.
    Dim rng As Range
    Set rng = ws.Range("G3","G" & NewRow - 1) _
                .Find(What:="Description",After:=ws.Range("G" & NewRow - 1),_
                      Lookin:= xlValues,LookAt:=xlWhole)
    ' Check if "Description" was not found.
    If rng Is Nothing Then Exit Sub
        
    ' Delete range 'A2:AK2' resized to the row above of
    ' where "Description" was found.
    ' First test with 'Select'.
    ' When tested,replace 'Select' with 'Delete'.
    ws.Range("A2","AK" & rng.Row - 1).Select
              
End Sub

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...