2009-06-15 11 views
7

मुझे एक्सेल वीबीए का उपयोग करके बाइट सरणी में एक साधारण स्ट्रिंग को कन्वर्ट करने की आवश्यकता है। फिर इस बाइट सरणी का अनुरोध अनुरोध के शरीर के रूप में किया जाता है।वीबीए में बाइट ऐरे में एक साधारण स्ट्रिंग को कैसे परिवर्तित करें?

मैं यह कैसे कर सकता हूं?

धन्यवाद।

उत्तर

8

यदि आपको केवल एएनएसआई वर्णों की आवश्यकता है, तो आप StrConv() फ़ंक्शन as is done here का उपयोग कर सकते हैं।

+0

दोनों उत्तर अच्छे काम करते हैं लेकिन इसे कम कोडिंग और समय की आवश्यकता होती है। – Ubalo

18

मैथ्यू एएनएसआई कन्वर्ट करने के लिए कैसे उत्तर दिया, लेकिन अगर आप जिसके परिणामस्वरूप बाइट सरणी चाहता था अभी भी मूल यूनिकोड स्ट्रिंग प्रतिनिधित्व करने के लिए, आप बस इसे सीधे आवंटित चाहते हैं:

Public Sub Main() 
    Dim b() As Byte 
    Dim s As String 
    s = "Whatever" 
    b = s 'Assign Unicode string to bytes.' 
    s = b 'Works in reverse, too!' 
    Debug.Print s 
End Sub 

इसके लिए बस इतना है कि। आप एक 16-तत्व बाइट सरणी के साथ समाप्त होते हैं, प्रत्येक क्रमिक जोड़ी एक यूनिकोड चरित्र का वर्णन करती है।

+1

बीटीडब्ल्यू वीबी कोड नमूने में आपकी टिप्पणियों को ठीक से हाइलाइट करने के लिए, प्रत्येक कोड लाइन – MarkJ

+1

के अंत में एक और एस्ट्रोफ़े जोड़ें 'क्या उस पर कोई गाइड है? मुझे कोड में प्रवेश करने के लिए असाधारण रूप से थकाऊ पाया गया। –

-1
' a bit of an example 
' had some strings down column G 
' nothing in columns "F" or "H" so that current works 
' Think about it.. there are many many columns 
' so leave blank columns on each side of setsof dats 
' then currentregion works ... IFF no blank rows in the data 
' 
' problem to solve some text was Fred3 John2 Blue3 
' others were Bert 3 Green 2 ... which was the require format 
' the ASC char 1 ..255 are the odd or even 
' numbered bytes if array is 1 based or 0 based 
' 
Private Sub CommandButton1_Click() 
    Dim RV$, Ra As Range, Ri&, AL%, WSA() As Byte 
    Dim Ci%, WS$, LV As Byte 

    Set Ra = Range("g8").CurrentRegion 
    For Ri = 1 To Ra.Rows.Count 
     WSA = CStr(Ra(Ri, 1).value) 
     AL = UBound(WSA) 
     LV = WSA(AL - 1) ' last char byte value 
     If LV > 47 And LV < 58 Then ' 0 to 9 
      If WSA(AL - 3) <> 32 Then ' no space " " 
       ReDim Preserve WSA(AL + 2) ' allow 1 more char 
       WSA(AL - 3) = 32 ' put in space 
       WSA(AL - 1) = LV ' return char 
       WS = WSA ' back to a string 
       Ra(Ri, 1) = WS ' back to the cell 
      End If 
     End If 
    Next Ri 
End Sub 

' of course the normal VBAcommands Instr len Mid replace & 
' would do the job ... but my brain is lazy and needed some exercise 
संबंधित मुद्दे