Board logo

標題: [發問] 是否有更適合字串的編輯修改呢? [打印本頁]

作者: dechiuan999    時間: 2012-6-17 10:25     標題: 是否有更適合字串的編輯修改呢?

各位大大好:

   小弟想提供一表單供USER
可以對B欄位資料做編輯、修改字串內容。

須求如下:
一、儲存格的資料為英文及數值組合
二、須逹成儲存格的字元為12個字元
三、可插入字元、刪除字元、修改字元、替換字元

   小弟已完成一表單,不知是否有不週延之處。
另想請敎各位大大是否有更適合的
方式可供USER對儲存格的字串做上述的操作嗎?

  小弟同時也想請敎各位大大,在此一表單其
Set mSht1 = Worksheets("UPDATA")
如何可簡化僅列出一次而不必逐一列
出在不同的控制項裡設定呢?

謝謝各位大大。
作者: GBKEE    時間: 2012-6-17 11:46

回復 1# dechiuan999
試試  Replace 函數  與 Replace 方法  Application.WorksheetFunction.Replace 有點不一樣

Replace 函數 傳回一個字串,該字串中指定的子字串已被取代成另一子字串,並且取代發生的次數也是指定的。
語法   Replace(expression, find, replace[, start[, count[, compare]]])
Replace 函數語法有如下幾個指名引數:
單元 描述
expression 必要引數。字串運算式,包含要取代的子字串。
find 必要引數。要搜尋到的子字串。
replace 必要引數。用來取代的子字串。
start 選擇性引數。在運算式中子字串搜尋的開始位置。如果忽略,假定從1開始。
count 選擇性引數。子字串進行取代的次數。如果忽略,預設值是 –1,它表明進行所有可能的取代。
compare 選擇性引數。數字值,表示判別子字串時所用的比較模式。關於其值,請參閱「設定值」。
作者: dechiuan999    時間: 2012-6-17 13:47

本帖最後由 dechiuan999 於 2012-6-17 13:52 編輯

謝謝版主大大的指點。
直接使用REPLACE函數可提升
功能性。那是否有方法可使用
滑鼠直接選取Textbox1.Text的某一連續字串
並導入至Textbox2.text而不必輸入
要更換的字串呢?

下列是小弟另一簡易的表單

ComboBox1→指定要替換字串的次數
Textbox1 →由儲存格傳入的字串
Textbox2 →能否由滑鼠選取Textbox1的某一連續字串並導入至Textbox2呢?
Textbox3 →指定要更換的字串,須由鍵盤輸入字串

Private Sub CommandButton1_Click()
   
    Dim mTxt1$, mTxt2$, mTxt3$
    Dim C1%
   
    C1 = ComboBox1.Value    '指定要替換字串的次數
    mTxt1 = TextBox1.Text   '由儲存格傳入的字串
    mTxt2 = TextBox2.Text   '能否由滑鼠選取Textbox1的某一連續字串並導入至Textbox2呢?
    mTxt3 = TextBox3.Text   '指定要更換的字串,須由鍵盤輸入字串
   
    mTxt1 = Replace(mTxt1, mTxt2, mTxt3, 1, C1, vbTextCompare)    '直接引用Replace函數,逹成編輯、修改、刪除、替換。
   
    TextBox1.Text = mTxt1
    Range("A1") = TextBox1.Text
   
   
End Sub

Private Sub UserForm_Initialize()
   
    TextBox1.Text = "ABCDEFG1234D5D6"
    With ComboBox1    '
        .AddItem "1"
        .AddItem "2"
        .AddItem "3"
        .Value = 1
    End With
   
End Sub
作者: GBKEE    時間: 2012-6-17 17:01

回復 3# dechiuan999
試試看

[attach]11426[/attach]
作者: dechiuan999    時間: 2012-6-17 20:57

謝謝版主大大。
小弟已收下也研究好一陣子,
還是全然沒有完全領會其含意。
今天下午頭腦真的有點不清醒,
越想它頭腦就越轉不過來,只好先收兵
等頭腦清醒一點再好好研究它了。

感恩版主大大!
作者: GBKEE    時間: 2012-6-17 21:10

回復 5# dechiuan999
可參考這篇
PS : 回文時  請按 [回覆] 按鈕  答覆你的人才會得到通知,
作者: dechiuan999    時間: 2012-6-18 06:15

回復 6# GBKEE


    謝謝版主大大。
小弟日後會改進。
小弟正在求解中。
replace函數比小弟想像中
要複雜一些。

謝謝您!
作者: GBKEE    時間: 2012-6-18 07:44

回復 7# dechiuan999
Replace 函數 的用法
  1. Sub Ex()
  2.     Dim W As String
  3.     W = "1ABCDE2ABCDE3ABCDE4ABCDE"
  4.     MsgBox Replace(W, "E", "?", , 1) & Chr(10) & _
  5.            Replace(W, "E", "?", 7) & Chr(10) & _
  6.            Replace(W, "E", "?", 13, 1)
  7. End Sub
複製代碼

作者: dechiuan999    時間: 2012-6-18 10:09

回復 8# GBKEE


    謝謝版主大大。
版主大大再次提供Replace函數範例
在應用上的差異,也讓小弟理解
引數start及count 其中的變化。
小弟也了解自已在學習上
總是處在一知半解的狀態;
這也是讓小弟一直無法更
上一層的原因。
小弟也會將版主大大提供
的範例加以發揮及應用。

感恩大大!
作者: dechiuan999    時間: 2012-6-19 06:55

回復 8# GBKEE


    版主大大您好:
小弟由版主大大提供的法中
多學到了Textbox三個屬性
SelText,SelLength,SelStar
另小弟也發現SelStar的起算
是由0起算。因此,語法上小
弟也修正為
If Shift = 4 And KeyCode = 13 Then TextBox4 = TextBox1.SelStart + 1

另TextBox2_Change內有二點疑惑
一、
xText = Mid(xText, InStr(xText, TextBox2) + Len(TextBox2))
有何用意呢?
二、
Do While InStr(xText, TextBox2)
此語法與小弟的認知有所不同
小弟改成
x2=InStr(xText, TextBox2)
do while x2
就會產生無窮迴圈
小弟就不知版主大大的
語法為何不會產生無窮迴圈呢?

謝謝版主大大。
作者: GBKEE    時間: 2012-6-19 07:13

回復 10# dechiuan999
  1. 'InStr 函數  傳回在某字串中一字串的最先出現位置,此位置為 Variant (Long)。
  2. Private Sub TextBox2_Change()
  3.     Dim xl As Integer, xText As String
  4.     xText = TextBox1   '字串=TextBox1
  5.     ComboBox1.Clear
  6.     Do While InStr(xText, TextBox2)
  7.         'While: 條件成立   執行回圈  ->  TextBox2字串在xText字串中最先出現位置 >1 => True成立,  0=>False 不成立
  8.         'Until: 條件不成立 執行回圈
  9.         ComboBox1.AddItem xl + 1
  10.         xl = xl + 1
  11.         xText = Mid(xText, InStr(xText, TextBox2) + Len(TextBox2))
  12.         '字串=剔除已出現位置的字元的字串  以避免無窮的迴圈
  13.         'InStr(xText, TextBox2) + Len(TextBox2) :最先出現位置+TextBox2的字元數
  14.     Loop
  15. End Sub
複製代碼

作者: dechiuan999    時間: 2012-6-19 09:24

回復 11# GBKEE


    版主大大早安:

小弟已領悟語法中
DO WHILE的變化了。
Sub aa()
    Dim mFlag As Boolean
    mFlag = True
    Do While mFlag
        MsgBox "現在測試中"
        mFlag = False
    Loop
End Sub

版主大大是利用
InStr(xText, TextBox2)及xText
的改變




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