กระบวนการของการแปลงจากบันทึก MS Excel ของ© เพื่อ ADIF ที่ค่อนข้างง่ายและสามารถทำได้โดยใช้บิตของการเขียนโปรแกรม VBA. ผ่านช่องทางนี้ เชื่อมโยง สามารถอ้างอิงถึงข้อกำหนดของ ADIF 1.0 ซึ่งถูกใช้โดยการเข้าสู่ระบบมากที่สุด, เป็นสิ่งสำคัญที่คุณอ่านเอกสารฉบับนี้.

เพื่อเริ่มกระบวนการแปลงขึ้นอยู่กับการเริ่มต้นการกวดวิชานี้โดยการสร้างแฟ้มใน MS Excel©. ในผ้าลินินแรกที่เขียนชื่อของเขตข้อมูลที่คุณจะต้องการนำเข้า (กรุณาตรวจสอบ ADIF 1.0 จากชื่อของเขตข้อมูล). แม้ในบรรทัดแรก, ประเภท “RAW ADIF” เซลล์สุดท้าย, นี้เป็นที่ที่ข้อความจะถูกเขียนใน ADIF.

แผ่นงานที่จะมีลักษณะเช่นนี้ (แต่ก็ยังไม่มีข้อมูลในบรรทัด 2). แม้ว่ารูปแบบ ADIF ไม่ได้ระบุจำนวนขั้นต่ำของเขตข้อมูล, อย่างน้อยเข้าสู่ระบบ QSO ของคุณต้องมีค่าที่จะโทร, QSO_Date, Time_On, โหมด e - band.

จากนั้นให้เลือกทั้งแผ่นงานและจัดรูปแบบเซลล์เป็นข้อความ.

บันทึกแฟ้มเป็น xls2adi.xls (แผ่นงานใน MS Excel©)

ให้เราตอนนี้การเขียนและการใส่รหัสใน VBA. ไปที่ Tools / Macro และคลิกที่แก้ไข Visual Basic (Alt F11).

ในการแก้ไข VBA ThisWorkbook ดับเบิลคลิก '’ ที่อยู่ในโครงการ – 'VBAProject. ซึ่งเป็นที่ที่คุณจะได้รับ block หลักของรหัสที่จะทำงานเมื่อคุณเปิดแฟ้มนี้อีกครั้ง.

บล็อกของรหัสที่เป็นไปตามกำหนดตัวแปรบางอย่างและการเรียกฟังก์ชั่น fCampoAdifValido (บรรทัด 05) ที่จะตรวจสอบว่าชื่อเขตข้อมูลที่อยู่บนบรรทัดแรกที่สอดคล้องกับข้อกำหนดของ ADIF ที่. ถ้าทั้งหมดที่ชื่อเขตข้อมูลที่มีฟังก์ชั่นที่ถูกต้องเรียก pEscreveAdif ขั้นตอนที่ (บรรทัด 09) จะเขียนบันทึกใน ADIF, ถ้าเขตข้อมูลที่มีชื่อที่ไม่ถูกต้องฟังก์ชันที่แสดงข้อความแสดงข้อผิดพลาด (บรรทัด 07) และสิ้นสุด.

คัดลอก / วางหรือพิมพ์รหัสต่อไปนี้:

 

ส่วนตัว Workbook_Open Sub()
  เป็น Boolean มซำ bNomeDoCampoValido
  (conLinhaInicial)
  sUltimaColuna = fQualEAUltimaColuna(conColunaInicial)
  bNomeDoCampoValido = fCampoAdifValido(conColunaInicial, sUltimaColuna)
    ถ้า bNomeDoCampoValido = เท็จแล้ว
       ("พบชื่อของเขตข้อมูลที่ไม่ถูกต้อง" & vbCrLf & "เอาคอลัมน์ที่เต็มไปด้วยสีแดง!")
    อื่น
      

ในการแก้ไข VBA คลิกแทรก / โมดูล. ในโมดูลนี้จะเป็นรหัสที่เหลืออยู่ที่เรียกว่าบล็อกหลัก.

ค่าคงที่ conLinhaInicial (บรรทัด 02 บล็อกถัดไป) และ conColunaInicial (บรรทัด 03 บล็อกถัดไป) บรรทัดที่กำหนด 2 (สเปรดชีท) มีการลงทะเบียนครั้งแรกและที่คอลัมน์ (สเปรดชีท) ที่เขตข้อมูลแรก.

fQualEAUltimaLinha ฟังก์ชั่น (บรรทัด 08 บล็อกถัดไป) และ fQualEAUltimaColuna (บรรทัด 17 บล็อกถัดไป) จะเป็นตัวกำหนดแถวสุดท้ายและข้อมูลในคอลัมน์. นี้ต้องใช้เซลล์ที่ว่างเปล่าหมายถึงการสิ้นสุดของการบันทึกเข้าสู่ระบบ.

fCampoAdifValido ฟังก์ชัน (บรรทัด 05 บล็อกก่อนหน้านี้) การทดสอบความถูกต้องของชื่อเขตข้อมูล. กรณี sNomeDoCampo วงจร 'เลือก’ (บรรทัด 31 บล็อกถัดไป) เขตข้อมูลที่จะสามารถเพิ่มตามข้อกำหนดของ ADIF ที่.

pEscreveAdif ขั้นตอน (บรรทัด 09 บล็อกก่อนหน้านี้) จะเขียนข้อความในคอลัมน์ที่มี ADIF “RAW ADIF” บรรทัดแรก. ขั้นตอนนี้จะนำมาจากเขต Ifen QSO_DATE, จุดสองจุดของเขตข้อมูลและเพิ่ม M TIME_ON ที่ส่วนท้ายของวงเขตข้อมูลที่. นี้เพื่อให้แมโครมากขึ้นสามารถกำหนดเงื่อนไขที่เข้มงวดมากขึ้นสำหรับการตรวจสอบข้อมูลในขั้นตอนนี้.

คัดลอก / วางหรือพิมพ์รหัสต่อไปนี้ภายในโมดูล:

 

ตัวเลือกที่ชัดเจน
 2
Const สาธารณะ conColunaInicial As String = "A"
As Integer สาธารณะ iUltimaLinha
(iPrimeiraLinha As Integer) As Integer
  (Folha1.Cells(iValRecebido, "A")) > 0
      iValRecebido iValRecebido = + 1
    ห่วง
   - 1
ฟังก์ชั่น End

(sPrimeiraColuna String) String
  (sPrimeiraColuna)
    ทำในขณะที่ Len(Folha1.Cells(1, Chr(iValRecebido))) > 0
      iValRecebido iValRecebido = + 1
    ห่วง
  (iValRecebido - 1)
ฟังก์ชั่น End

(sPrimeiraColuna String, sUltimaColuna As String) บูลีน
  (sPrimeiraColuna) เพื่อเก่า(sUltimaColuna)
      LCase sNomeDoCampo =(Folha1.Cells(1, iColunaCorrente - 64))
      เลือกกรณี sNomeDoCampo
         "วงดนตรี": fCampoAdifValido = True
         "โทร": fCampoAdifValido = True
         "CQZ": fCampoAdifValido = True
         "โหมด": fCampoAdifValido = True
         "qso_date": fCampoAdifValido = True
         "rst_rcvd": fCampoAdifValido = True
         "rst_sent": fCampoAdifValido = True
         "SRX": fCampoAdifValido = True
         "STX": fCampoAdifValido = True
         "time_on": fCampoAdifValido = True
         "adif ดิบ"
          fCampoAdifValido = True
           - 64
        กรณีที่คนอื่น
          (1, iColunaCorrente - 64).Interior.Color = RGB(255, 0, 0)
          fCampoAdifValido = เท็จ
        ()
  As Integer Dim iLinhaCorrente
   ""
    สำหรับ iColunaCorrente = Asc(conColunaInicial) เพื่อเก่า(sUltimaColuna) - 1
      ถ้า LCase(Folha1.Cells(1, Chr(iColunaCorrente))) = "วงดนตรี" แล้วก็
        (iLinhaCorrente, Chr(iColunaCorrente)) & "M"
      อื่น
        (Folha1.Cells(1, Chr(iColunaCorrente))) = "qso_date" แล้วก็
          (Folha1.Cells(iLinhaCorrente, Chr(iColunaCorrente)), "-", "")
        อื่น
          (Folha1.Cells(1, Chr(iColunaCorrente))) = "time_on" แล้วก็
            (Folha1.Cells(iLinhaCorrente, Chr(iColunaCorrente)), ":", "")
          อื่น
            (iLinhaCorrente, Chr(iColunaCorrente))
          End If
         & "<" & LCase(Folha1.Cells(1, Chr(iColunaCorrente))) & ":" & เท่านั้น(sTextoNaCelula) & ">" & sTextoNaCelula
    (iLinhaCorrente, iAdifRaw) = SLinhaEmAdif & "<" & "EOR" & ">"
  ต่อไป

 

คลิกที่ File / Save xls2adi.xls และปิดแก้ไข VBA.

ตอนนี้คัดลอกข้อมูลใน MS Excel ไฟล์ของคุณ© ที่คุณต้องการแปลงไปยังคอลัมน์ที่เหมาะสม, ร้ายแรงออกจากที่สิ้นสุดและ MS Excel©.

คุณอาจจำเป็นต้องเปลี่ยนการตั้งค่าสำหรับ MS Excel sugurança© เพื่อเรียกใช้แมโคร, ถ้าจำเป็นต้องไปที่ Tools / Macro และคลิกการรักษาความปลอดภัย, เลือกระดับที่ต่ำกว่า. นี้ถูกเขียนสำหรับ MS Excel© em MS Windows XP© (ทั้งในรุ่นโปรตุเกส). ถ้าคุณจะใช้รหัสนี้ในภาษาอื่น, เช่นในภาษาอังกฤษ, แทนที่คำว่า 'Sheet1’ por 'Sheet1’

เมื่อคุณดับเบิลคลิกที่ไฟล์ xls2adi.xls, รหัสที่คุณเพิ่งป้อนจะถูกดำเนินการและคอลัมน์ “RAW ADIF” เข้าสู่ระบบของเราอยู่ในรูปแบบ ADIF.

ตอนนี้ให้เสร็จสิ้น, เลือกเนื้อหาของคอลัมน์ “RAW ADIF” copie E (Ctrl C), เริ่มต้น Notepad (Notepad) โคลอี (Ctrl V). บันทึกไฟล์ที่มีนามสกุลเพิ่มเติมที่.

ตัวอย่างรหัสนี้มีอิสระที่จะใช้, คุณอิสระสามารถใช้. มันเป็นตัวอย่างที่ง่ายมากของสิ่งที่สามารถทำได้โดยใช้ VBA (Visual Basic สำหรับ Applications). ประกอบการตรวจสอบรหัสนี้กับความแม่นยำมากขึ้น, โดยเฉพาะอย่างยิ่งใน qso_date ฟิลด์ '’ 'time_on' E, ซึ่งรูปแบบจะต้องตรงกับข้อกำหนด ADIF. ถ้าคุณสังเกตเห็นข้อผิดพลาดหรือมีคำถามใด ๆ, ไม่ลังเลที่จะแสดงความคิดเห็น. ฉันหวังว่าบทความจะเป็นประโยชน์.