標題:
[發問]
如何利用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
不知道你所謂的特定文字是什麼?
不過你可以利用工作表事件來製作
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$B$1" Then
If Target = "" Then
Target.Offset(, -1) = ""
Else
Target.Offset(, -1) = Target & " DEF"
End If
End If
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欄
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 2 Then
If Target = "" Then
Target.Offset(, -1) = ""
Else
Target.Offset(, -1) = Target & " " & Target.Row
End If
End If
End Sub
複製代碼
作者:
leehom
時間:
2015-9-15 23:39
回復
4#
lpk187
的確很神奇,我發現輸入文字是成功的,但下拉遞增就不行了,為甚麼會這樣呢師兄?
作者:
GBKEE
時間:
2015-9-16 07:34
但下拉遞增就不行了,為甚麼會這樣呢師兄?
leehom 發表於 2015/9/15 23:39
這樣就可以.
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim E As Range
If Target.Column = 2 Then
For Each E In Target
If E = "" Then
E.Offset(, -1) = ""
Else
E.Offset(, -1) = E & " " & E.Row
End If
Next
End If
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
整個走向錯誤了,不應該這樣去寫
一個問題是要考慮後來使用者該如何輸入,你第一個問題到後面這一個問題,恩考的方向完全不同了。
Sub worksheet_change(ByVal Target As Range)
If Target.Address = "$B$2" Then
Application.EnableEvents = False
i = Application.InputBox("How many numbers you want to add?", "Prompt", , , , , , 1) - 1
For j = Target.Row + 1 To Target.Row + i
Cells(j, Target.Column) = Left(Cells(j - 1, Target.Column), 5) & Right(Cells(j - 1, Target.Column), 7) + 1
Cells(j, Target.Column - 1) = Cells(j, Target.Column - 1).Row
Next
Application.EnableEvents = True
End If
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
Sub worksheet_change(ByVal Target As Range)
If Target.Address = "$B$2" Then
Application.EnableEvents = False
Cells(2, Target.Column - 1) = 1
i = Application.InputBox("How many numbers you want to add?", "Prompt", , , , , , 1) - 1
For j = Target.Row + 1 To Target.Row + i
Cells(j, Target.Column) = Left(Cells(j - 1, Target.Column), 5) & Right(Cells(j - 1, Target.Column), 7) + 1
Cells(j, Target.Column - 1) = Cells(j, Target.Column - 1).Row - 1
Next
Application.EnableEvents = True
End If
End Sub
複製代碼
作者:
leehom
時間:
2015-9-16 15:44
回復
10#
lpk187
終於成功了,感謝各位的幫忙,學到不少了,THX!!!
作者:
GBKEE
時間:
2015-9-17 05:38
回復
10#
lpk187
可用自動填滿,試試
Sub Worksheet_Change(ByVal Target As Range)
Dim i As Integer
If Target.Address = "$B$2" Then
Application.EnableEvents = False
Cells(2, "A") = 1
i = Application.InputBox("How many numbers you want to add?", "Prompt", , , , , , 1)
With Range("A2:B2")
Range(.Cells.Offset(1), .Cells.End(xlDown)) = "" '清除舊有資料
.AutoFill Range("A2:B2").Resize(i) '自動填滿
End With
Application.EnableEvents = True
End If
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/)