想請問前輩,有一個VBA程式已經寫好,但卻突然在中間插入一欄,導致我的程式碼都需要往右邊調整一個column。
不曉得有什麼好方法可以修改呢?還是只能一個個搜尋、修改程式。但是我擔心有地方沒改到,影響程式。
或者可以在最剛開始撰寫程式時,先設定些什麼,以便後續的修改?
例如Excel裡面
A、B、C
姓名、電話、地址
在A和B中間又插入一欄,變成:
A、B、C、D
姓名、E-mail、電話、地址
導致我原本的電話和地址需要從 B & C 變更成 C & D
實際上的程式沒這麼單純,所以在想有程式上有沒有好的方式可以直接定義一個欄位,當它從B欄變成C欄,可以很聰明的判定?
Dim Col_Name as String
Dim Col_Phone as String
Dim Col_Address as String
Col_Name = "A"
Col_Phone = "B"
Col_Address = "C"
Worksheets("工作表1").Range(Col_Name&"2").Value = "小明"
Worksheets("工作表1").Range(Col_Phone&"2").Value = "0912123123"
Worksheets("工作表1").Range(Col_Address&"2").Value = "天龍國天字第一號"
我會這樣設計變數,給你參考
最快的方法就是用程式去找出欄位的所在位置,
這樣以後不管你插入幾欄,程式都會幫你重新定位。
=>工作表有明確的欄位標題,然後根據標題找到對應的欄位位置。
Dim headers As Variant
headers = Range("A1:D1").Value
Dim nameCol As Integer
Dim emailCol As Integer
Dim phoneCol As Integer
Dim addressCol As Integer
' 根據標題找到對應的欄位位置
For i = 1 To UBound(headers, 2)
Select Case headers(1, i)
Case "名稱"
nameCol = i
Case "E-mail"
emailCol = i
Case "電話"
phoneCol = i
Case "地址"
addressCol = i
End Select
Next i
' 使用找到的欄位位置
Range(Cells(row, nameCol), Cells(row, nameCol)).Value = nameValue
Range(Cells(row, emailCol), Cells(row, emailCol)).Value = emailValue
Range(Cells(row, phoneCol), Cells(row, phoneCol)).Value = phoneValue
Range(Cells(row, addressCol), Cells(row, addressCol)).Value = addressValue