我有一个Excel VBA工作流程,可将数据从数据输入表(inputwks)输入到表中。如下所示:
我不想使用列字母或数字,因为我可能会更改顺序(例如,日期/时间对A列中的用户而言可能比M看起来更好)。
如何更改下面的代码,以便宏将搜索“日期/时间”列,而不是转到M列,而对“数据记录”也是如此?
感谢您提供的任何帮助。
Sub UpdateLogWorksheet()
'Dim historyWks As Worksheet
Dim ccarWks As Worksheet
Dim inputWks As Worksheet
Dim nextRow As Long
Dim oCol As Long
'======================Named range setup=========================
Dim myCopy As Range
Dim myTest As Range
Dim lRsp As Long
'=====================worksheet name setup=======================
Set inputWks = Worksheets("Input (Modded)")
Set ccarWks = Worksheets("CCAR - VB Template Ver2.0")
oCol = 3
'===================Copy/paste data commands==================
Set myCopy = inputWks.Range("inputvalue")
With ccarWks
nextRow = .Cells(.Rows.Count, "A").End(xlUp).Offset(1, 0).Row
End With
With ccarWks
With .Cells(nextRow, "M") 'was "A"
.Value = Now
.NumberFormat = "dd/mm/yyyy hh:mm:ss" 'enter date and time stamp in record
End With
myCopy.Copy
.Cells(nextRow, 3).PasteSpecial Paste:=xlPasteValues, Transpose:=True
Application.CutCopyMode = False
End With
End Sub
答案 0 :(得分:0)
我过去也不得不处理此问题,因为源表已更改,因此您不能确定该字段位于同一列中。 如果您始终具有相同的字段标题(列标题),则可以使用我之前使用的代码。
Public Function FindColumn(ws As Worksheet, name As String, Optional headerRow As Integer = 1) As Integer
On Error GoTo FUNC_ERR
Dim sRng As Range: Set sRng = ws.Rows(headerRow).Find(what:=name, _
LookIn:=xlValues, _
lookat:=xlWhole)
If sRng Is Nothing Then
'Handle if not found
Else
FindColumn = sRng.Column
End If
FUNC_EXIT:
Exit Function
FUNC_ERR:
'Handle error
End Function
HeaderRow是可选的,并假定为第1行,但是如果需要,您也可以调出其他行。
然后,您可以使用返回的列号来代替在.cell()
标注中使用列字母。
dim columnNumber as Integer: columnNumber = FindColumn(ccarWks, "Header Name")
With ccarWks
With .Cells(nextRow, columnNumber)
.Value = Now
.NumberFormat = "dd/mm/yyyy hh:mm:ss"
End With
'...more code...
End With
希望这对您有所帮助。
答案 1 :(得分:0)
我添加了以下代码,以确保它能够动态更改要查找的列号:
Datetimecol = Application.WorksheetFunction.Match("date/time", CCARWKS.Range("A4:AZ4"), 0)
With .Cells(nextRow, datetimecol)
这现在会自动更改列值,并防止破坏代码。