问题描述
"\\uXXXX"
您好,我在尝试偏移说明中的列和行时,如果发现它删除了先前测试中的所有上述数据,但是当我偏移它时,该行向上移动,但列未偏移其假定的30。它没有任何错误。我是否需要将字母设置为值才能使其正常工作?谢谢麦克斯
解决方法
-
确保使用
Option Explicit
来检测可变错字。 -
确保每个
Range
,Cells
,Rows
和Colums
对象都有一个引用为ws.Range
的工作表,否则将需要任何处于活动状态的工作表(并且可以通过用户单击轻松更改)。 -
您可以在Range.Find method的文档中看到,绝对需要指定以下4个参数或获得随机结果:
LookIn
,LookAt
,SearchOrder
和MatchByte
的设置 每次使用此方法时都会保存。如果不指定值 对于这些参数,下次调用该方法时,已保存 使用值。设置这些参数会更改 查找对话框,并更改查找对话框中的设置 如果省略参数,则更改保存的值。至 为避免出现问题,每次使用此参数时都要明确设置这些参数 方法。如果不定义这些参数,它可能现在可以正常工作,并再次停止工作。
-
使用
Find()
方法后,请确保测试是否发现了If Not FoundAt Is Nothing Then
,否则它将消失。 -
您在
[ ]
中使用的[celladdress]
与[A1]
表示法无关,并且不能像您想象的那样工作。它们需要删除! -
声明变量尽可能靠近其首次使用而不是最顶部。否则,您将很容易以
Dim v As Integer
结尾,而在整个代码中永远不会使用v
。 -
最后使用正确的代码格式和正确的缩进。代码越容易阅读,您将犯的错误越少,调试起来也就越容易。不要像“以后会修复格式” 那样工作。这会减慢您编写好的代码的速度,并且您可能永远都无法修复它。
所以您最终会得到类似的东西:
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