Board logo

標題: 儲存格內容及特殊符號問題 [打印本頁]

作者: lionliu    時間: 2015-7-23 10:49     標題: 儲存格內容及特殊符號問題

各位大哥好:
我客戶系統匯出excel檔案遇到2問題請教:
1.在excel上所看到的資料正常,但是若另存成TXT檔開頭和結尾有多出 "請問我應如何清除它
2.中間的"Ø"因需要我想用AAA取代又該如何,若用手動查找取代沒問題但是若以巨集會將全部的O給取代掉。
上列問題我想用vba處裡是否可行。[attach]21458[/attach]
作者: Min    時間: 2015-7-25 00:56

"Ø"這個符號ASCII不是216就是248
偏偏VBA的ASCII只能支援0~128

驗證方式如下;
Sub VB_ASCII()
Dim x As Integer

Cells(1, 1) = "Item"
Cells(1, 2) = "Chr"
Cells(1, 3) = "Asc"
   
For x = 0 To 255
    Cells(x + 2, 1) = x
    Cells(x + 2, 2) = Chr(x)
    Cells(x + 2, 3) = Asc(Chr(x))
Next x
End Sub
作者: Min    時間: 2015-7-25 00:58

解法二
Replace What:=range("B1"), Replacement:="aa"

B1欄位Hardcode"Ø"

呵呵呵~ 笨方式^^"
作者: bobomi    時間: 2015-7-25 07:15

以你那個檔案而言
你應該列舉一下
輸出的 txt檔內容, 你想要的是長成何模樣
作者: lpk187    時間: 2015-7-25 11:07

本帖最後由 lpk187 於 2015-7-25 11:12 編輯

回復 2# Min

"Ø"這個符號VBA是可以取得的
  1. Sub VB_ASCII()
  2. Dim x As Integer

  3. Cells(1, 1) = "Item"
  4. Cells(1, 2) = "Chr"
  5. Cells(1, 3) = "Asc"
  6.    
  7. For x = 0 To 255
  8.     Cells(x + 2, 1) = x
  9.     Cells(x + 2, 2) = ChrB(x)
  10.     Cells(x + 2, 3) = AscB(ChrB(x))
  11. Next x
  12. End Sub
複製代碼
VBA不只Chr(n)可以使用,還有ChrB(n)和ChrW(n)
  1. Public Sub test()
  2. Dim n As String
  3. Dim arr(1 To 256, 1 To 512)
  4. n = 0
  5. For i = 1 To 256
  6.     For j = 1 To 256
  7.         arr(j, i * 2 - 1) = ChrW(n)
  8.         arr(j, i * 2) = n
  9.         n = n + 1
  10.     Next
  11. Next
  12. Range("A1").Resize(256, 512) = arr
  13. End Sub
複製代碼
Chr 函數
請參閱     範例     特性

傳回一個含有與指定的字元碼相關之字元的 String。

語法

Chr(charcode)

charcode 引數是一個用來識別某字元的Long。

請注意

0 到 31 之間的數字與一般、非列印的ASCII碼相同,例如,Chr(10) 會傳回換行字元。charcode 的正常範圍為 0-255。然而,在DBCS系統,charcode 的實際範圍為 -32768 到 65535。

附註 ChrB 函數是使用於含有位元組資料的 String,而非傳回一個字元,其有可能是一或兩個位元組,而 ChrB 都是傳回一個位元組。ChrW 函數則傳回一個包含Unicode 字元的String,若在不支援Unicode的平台上,其功能與Chr函數相同。

備註   Visual Basic for the Macintosh 不支援 Unicode 字串。所以,ChrW(n) 無法傳回 n 個數值 (範圍為 128 到 65,535) 的所有 Unicode 字元,因為它位在 Windows 環境中。相反地,ChrW(n) 會企圖為 n 大於 127 的 Unicode 數值進行「最佳推測」。因此,您不可以在 Macintosh 環境中使用 ChrW。
作者: bobomi    時間: 2015-7-25 11:19

回復 5# lpk187


ChrW 編碼應該和 Ascii 不一樣哦

作者: lpk187    時間: 2015-7-25 11:38

本帖最後由 lpk187 於 2015-7-25 11:43 編輯

回復 6# bobomi
  1. Sub VB_ASCII()
  2. Dim x As Integer

  3.    
  4. For x = 0 To 255
  5.     Cells(x + 2, 1) = x
  6.     Cells(x + 2, 2) = Chr(x)
  7.     Cells(x + 2, 3) = ChrB(x)
  8.     Cells(x + 2, 4) = ChrW(x)
  9.     Cells(x + 2, 5) = AscW(ChrW(x))
  10. Next x
  11. End Sub
複製代碼
除了Chr只能顯示0~127外編碼看不出哪裡不同
ChrW(n) 只是不能在 Macintosh 環境中使用
作者: bobomi    時間: 2015-7-25 11:52

回復 7# lpk187


我指的是 ChrW 和 Ascii 編碼  
ChrW(224)  = à
Ascii (224) = ‡
作者: GBKEE    時間: 2015-7-25 13:52

回復 1# lionliu
1.在excel上所看到的資料正常,但是若另存成TXT檔開頭和結尾有多出 "請問我應如何清除它
請參考這裡

2.中間的"Ø"因需要我想用AAA取代又該如何,若用手動查找取代沒問題但是若以巨集會將全部的O給取代掉。
請上傳你巨集的程式碼!
作者: lpk187    時間: 2015-7-25 13:52

回復 8# bobomi

不好意思,再次打擾!
我剛查了微軟的ASCII擴充碼https://support.office.com/zh-tw/article/ASCII-%E5%AD%97%E5%85%83%E8%A1%A8-D13F58D3-7BCB-44A7-A4D5-972EE12E50E0?ui=zh-TW&rs=zh-TW&ad=TW#bm5
也是和你PO的圖不一樣!   ??
而且查了許多張關於ASCII碼圖片,則是224這個碼卻有好幾種,於是我矇了
作者: bobomi    時間: 2015-7-25 15:47

回復 10# lpk187

是我貼錯了
你那個才是微軟的 Ascii
我用 C語言確定過了
作者: lionliu    時間: 2015-7-25 20:07

本帖最後由 lionliu 於 2015-7-25 20:17 編輯

回復 9# GBKEE
謝謝各位前輩的指導,剛剛事了CHRW(216)已可以了
第一個問題在研究中謝謝
  1. Range("a:a").Replace What:=ChrW(216), Replacement:="AAA"
複製代碼





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