Board logo

標題: [發問] 如何利用VBA回傳文字? [打印本頁]

作者: leehom    時間: 2015-9-15 12:45     標題: 如何利用VBA回傳文字?

假如A1,B1

如何在B1輸入任何文字後,A1會出現特定安排的文字,但A1不想輸入任何函數,要保持空白。
例如: B1如輸入ABC,A1會自動添加預設的文字如”DEF”,但A1本身是空格的,那應該要怎麼做呢?求高手指教!
作者: lpk187    時間: 2015-9-15 13:56

回復 1# leehom


    不知道你所謂的特定文字是什麼?
不過你可以利用工作表事件來製作
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2. If Target.Address = "$B$1" Then
  3.     If Target = "" Then
  4.         Target.Offset(, -1) = ""
  5.     Else
  6.         Target.Offset(, -1) = Target & " DEF"
  7.     End If
  8. End If
  9. End Sub
複製代碼

作者: leehom    時間: 2015-9-15 21:47

本帖最後由 leehom 於 2015-9-15 21:48 編輯

回復 2# lpk187


果然有用啊,謝謝啊!!還想再請教一下,如果想回傳的是數字,如何設定遞增?
例如B1輸入文字,A1回傳是"1",B2輸入文字,A2回傳是"2",B3輸入文字,A3回傳是"3",
如此類推,要如何編寫呢?謝謝師兄指教!!!:D
作者: lpk187    時間: 2015-9-15 22:33

本帖最後由 lpk187 於 2015-9-15 22:34 編輯

回復 3# leehom


    依照你傳回數字,可以利用Target的列號(Row)回傳
觸發則改為第二欄Column = 2 ,也就是B欄
  1. Private Sub Worksheet_Change(ByVal Target As Range)

  2. If Target.Column = 2 Then
  3.     If Target = "" Then
  4.         Target.Offset(, -1) = ""
  5.     Else
  6.         Target.Offset(, -1) = Target & " " & Target.Row
  7.     End If
  8. End If
  9. End Sub
複製代碼

作者: leehom    時間: 2015-9-15 23:39

回復 4# lpk187

的確很神奇,我發現輸入文字是成功的,但下拉遞增就不行了,為甚麼會這樣呢師兄?
作者: GBKEE    時間: 2015-9-16 07:34

但下拉遞增就不行了,為甚麼會這樣呢師兄?
leehom 發表於 2015/9/15 23:39

這樣就可以.
  1. Option Explicit
  2. Private Sub Worksheet_Change(ByVal Target As Range)
  3.     Dim E As Range
  4.     If Target.Column = 2 Then
  5.         For Each E In Target
  6.             If E = "" Then
  7.                 E.Offset(, -1) = ""
  8.             Else
  9.                 E.Offset(, -1) = E & " " & E.Row
  10.             End If
  11.         Next
  12.     End If
  13. End Sub
複製代碼

作者: leehom    時間: 2015-9-16 13:10

本帖最後由 leehom 於 2015-9-16 13:11 編輯

[attach]22001[/attach]


回復 6# GBKEE




感謝超級版主的回覆啊,我試過是有效的,但我想將代碼引入這個工作表卻無法成功,
我之前請教了其他高人,寫了一些VBA代碼,一開啟的話會彈出視窗要求輸入號碼,
文字模式是ABCD0123456,然後輸入增加多少個,它會自動遞增,像圖上那樣,
我的原意是希望是A欄"QTY"會自動添加號碼然後順應遞增,但卻無法成功,
只好再請求各位高手了,謝謝啊!!
作者: lpk187    時間: 2015-9-16 14:07

回復 7# leehom


    整個走向錯誤了,不應該這樣去寫
一個問題是要考慮後來使用者該如何輸入,你第一個問題到後面這一個問題,恩考的方向完全不同了。
  1. Sub worksheet_change(ByVal Target As Range)
  2.      If Target.Address = "$B$2" Then
  3.      Application.EnableEvents = False
  4.      i = Application.InputBox("How many numbers you want to add?", "Prompt", , , , , , 1) - 1
  5.      For j = Target.Row + 1 To Target.Row + i
  6.          Cells(j, Target.Column) = Left(Cells(j - 1, Target.Column), 5) & Right(Cells(j - 1, Target.Column), 7) + 1
  7.          Cells(j, Target.Column - 1) = Cells(j, Target.Column - 1).Row
  8.      Next
  9.      Application.EnableEvents = True
  10.      End If
  11. End Sub
複製代碼

作者: leehom    時間: 2015-9-16 14:57

回復 8# lpk187




先謝了,只差一點點就完美了,因為現在A3是3,A4是4,但表格上應該是A2是1,A3是2,A4是3,再次拜托眾大神了。
作者: lpk187    時間: 2015-9-16 15:10

回復 9# leehom
  1. Sub worksheet_change(ByVal Target As Range)
  2.      If Target.Address = "$B$2" Then
  3.      Application.EnableEvents = False
  4.         Cells(2, Target.Column - 1) = 1
  5.      i = Application.InputBox("How many numbers you want to add?", "Prompt", , , , , , 1) - 1
  6.      For j = Target.Row + 1 To Target.Row + i
  7.          Cells(j, Target.Column) = Left(Cells(j - 1, Target.Column), 5) & Right(Cells(j - 1, Target.Column), 7) + 1
  8.          Cells(j, Target.Column - 1) = Cells(j, Target.Column - 1).Row - 1
  9.      Next
  10.      Application.EnableEvents = True
  11.      End If
  12. End Sub
複製代碼

作者: leehom    時間: 2015-9-16 15:44

回復 10# lpk187


    終於成功了,感謝各位的幫忙,學到不少了,THX!!!
作者: GBKEE    時間: 2015-9-17 05:38

回復 10# lpk187
可用自動填滿,試試
  1. Sub Worksheet_Change(ByVal Target As Range)
  2.     Dim i As Integer
  3.     If Target.Address = "$B$2" Then
  4.     Application.EnableEvents = False
  5.     Cells(2, "A") = 1
  6.     i = Application.InputBox("How many numbers you want to add?", "Prompt", , , , , , 1)
  7.     With Range("A2:B2")
  8.         Range(.Cells.Offset(1), .Cells.End(xlDown)) = ""  '清除舊有資料
  9.         .AutoFill Range("A2:B2").Resize(i)    '自動填滿
  10.     End With
  11.     Application.EnableEvents = True
  12.     End If
  13. End Sub
複製代碼

作者: leehom    時間: 2015-9-17 14:49

回復 12# GBKEE


    這個很棒,不再限於ABCD0123456這個格式,任何長短數字都可以遞增。再請教一下,如果想A的數字自動加括號要怎麼寫?如1),2),3).....,謝謝!!
作者: lpk187    時間: 2015-9-17 16:17

回復 13# leehom

把Cells(2, "A") = 1 把這句改成    Cells(2, "A") = 1 & ")"
作者: leehom    時間: 2015-9-17 16:50

回復 14# lpk187


    不行哦,我也有試過,但全部會變成1)
作者: leehom    時間: 2015-9-17 20:57

回復 14# lpk187

我又試了一下,現在又可以了,之前那個workbook可能有些問題,總之謝謝大家了!!




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)