iT邦幫忙

0

VBA 程式欄變更問題

  • 分享至 

  • xImage

想請問前輩,有一個VBA程式已經寫好,但卻突然在中間插入一欄,導致我的程式碼都需要往右邊調整一個column。
不曉得有什麼好方法可以修改呢?還是只能一個個搜尋、修改程式。但是我擔心有地方沒改到,影響程式。
或者可以在最剛開始撰寫程式時,先設定些什麼,以便後續的修改?

例如Excel裡面

A、B、C
姓名、電話、地址

在A和B中間又插入一欄,變成:

A、B、C、D
姓名、E-mail、電話、地址

導致我原本的電話和地址需要從 B & C 變更成 C & D

實際上的程式沒這麼單純,所以在想有程式上有沒有好的方式可以直接定義一個欄位,當它從B欄變成C欄,可以很聰明的判定?

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
不明
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 = "天龍國天字第一號"

我會這樣設計變數,給你參考

wd_811 iT邦新手 5 級 ‧ 2024-04-17 17:42:33 檢舉

這是個方法,非常謝謝您。

0
rain_yu
iT邦研究生 5 級 ‧ 2024-04-17 08:42:03

最快的方法就是用程式去找出欄位的所在位置,
這樣以後不管你插入幾欄,程式都會幫你重新定位。
=>工作表有明確的欄位標題,然後根據標題找到對應的欄位位置。

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
wd_811 iT邦新手 5 級 ‧ 2024-04-17 17:42:00 檢舉

原來如此,完全沒想到可以用欄位名稱讀取位置。謝謝您!!

我要發表回答

立即登入回答