PDA

View Full Version : مانور گزارشگیری در اکسل



smderfan
جمعه 03 اسفند 1386, 16:16 عصر
سلام
من یک نمونه از برنامه هایی که اطلاعات رو از اکسس به اکسل انتقال می دهد دانلود کردم ولی کار نمی کنه نمی دونه مشکل چیه.
مشکل اصل من به این صورت هست که من می خوام در یک شیت اکسل عنوانین گزارش رو طراحی کنم و فقط داده ها از اکسس به داخل این فایل هدایت بشه.
نمونه رو ببینید و اگر نمونه مشابهی بود معرفی کنید
با تشکر

smderfan
یک شنبه 05 اسفند 1386, 10:02 صبح
سلام
من احتیاج به یک نمونه دارم که بتونه :
1- اطلاعات یک جدول یا کوئری رو به اکسل ساپورت کنه.
2- داده ها رو در یک سطر و ستون خاصی قرار بده.
از دوستان اگر کدی در این زمینه دارم برام قرار بده ... با تشکر

smderfan
سه شنبه 07 اسفند 1386, 00:14 صبح
سلام
بالاخره کدش رو پیدا کردم :

Dim xlApp As Excel.Application
Dim xlSheet As Excel.Worksheet
Dim xlWorkbook As Excel.Workbook
Dim acQuery As QueryDef
Dim objRST As Recordset
Dim strQueryName As String
strQueryName = "Query1"
Set xlApp = CreateObject("Excel.Application")
xlApp.Visible = True
Set xlWorkbook = xlApp.Workbooks.Add
Set objRST = Application.CurrentDb.OpenRecordset(strQueryName)

Set xlSheet = xlWorkbook.Sheets(1)
For lvlColumn = 0 To objRST.Fields.Count - 1
xlSheet.Cells(1, lvlColumn + 1).Value = _
objRST.Fields(lvlColumn).Name
Next

xlSheet.Range(xlSheet.Cells, _
xlSheet.Cells).HorizontalAlignment = xlCenter
xlSheet.Range(xlSheet.Cells, _
xlSheet.Cells).Font.Name = "B Roya"
xlSheet.Range(xlSheet.Cells, _
xlSheet.Cells).Font.Size = 11
xlSheet.Range(xlSheet.Cells, _
xlSheet.Cells).Font.Bold = True
xlSheet.Range(xlSheet.Cells, _
xlSheet.Cells).ShrinkToFit = True


With xlSheet
.Range("A2").CopyFromRecordset objRST
.Name = Left(strQueryName, 31)
End With
'
xlSheet.DisplayRightToLeft = True
Set xlSheet = Nothing
Set xlWorkbook = Nothing
Set xlApp = Nothing


تنها سوالی که برام پیش آمده اینکه با چه کدی یک ستون بعنوان ردیف انتخاب کنم که به تعداد ردیف های ایجاد شده شماره ردیف قرار بده.

amiry54321
سه شنبه 07 اسفند 1386, 07:36 صبح
سلام
تشکر من هم یک مشکلی دارم مثل شما اگر امکان دارد کمی توضیح دهید تا مشکل من هم رفع شود
من باید اطلاعات را از یک جدول اکسس به یک چارت که استاندارد اداره است در اکسل انتقال دهم

مهدی قربانی
سه شنبه 07 اسفند 1386, 10:52 صبح
تنها سوالی که برام پیش آمده اینکه با چه کدی یک ستون بعنوان ردیف انتخاب کنم که به تعداد ردیف های ایجاد شده شماره ردیف قرار بده.سلام
اون قسمتهایی رو که قرمز کردم اضافه کن چیزی که می خوای اجرا میشه .

Dim xlApp As Excel.Application
Dim xlSheet As Excel.Worksheet
Dim xlWorkbook As Excel.Workbook
Dim acQuery As QueryDef
Dim objRST As Recordset
Dim strQueryName As String
Dim I As Long
strQueryName = "Query1"
Set xlApp = CreateObject("Excel.Application")
xlApp.Visible = True
Set xlWorkbook = xlApp.Workbooks.Add
Set objRST = Application.CurrentDb.OpenRecordset(strQueryName)

Set xlSheet = xlWorkbook.Sheets(1)
For lvlColumn = 0 To objRST.Fields.Count - 1
xlSheet.Cells(1, lvlColumn + 1).Value = _
objRST.Fields(lvlColumn).name
Next

xlSheet.Range(xlSheet.Cells, _
xlSheet.Cells).HorizontalAlignment = xlCenter
xlSheet.Range(xlSheet.Cells, _
xlSheet.Cells).Font.name = "B Roya"
xlSheet.Range(xlSheet.Cells, _
xlSheet.Cells).Font.Size = 11
xlSheet.Range(xlSheet.Cells, _
xlSheet.Cells).Font.Bold = True
xlSheet.Range(xlSheet.Cells, _
xlSheet.Cells).ShrinkToFit = True


With xlSheet
.Range("A2").CopyFromRecordset objRST
.name = Left(strQueryName, 31)

End With
'
For I = 1 To objRST.RecordCount

xlSheet.Range("a1").Value = I
Next I
xlSheet.Cells(1, 1).Value = "ردیف"
xlSheet.DisplayRightToLeft = True
Set xlSheet = Nothing
Set xlWorkbook = Nothing
Set xlApp = Nothing

jaberian2
سه شنبه 07 اسفند 1386, 11:01 صبح
سلام من می خوام اطلاعات یه جدول رو به فایل اکسل بفرستم. اینکارو با یک ماکرو کردم اما می حوام هر وقت اطلاعات جدول تغییر کرد تو همون فایل اکسل قبلی اطلاعات به روز بشن و نیازی به ساخت اکسپورت مجدد نداشته باشم. ترنسفر نتوسنت کمکم کنه.
سئوال بعدیم اینه که می خوام چند تا شیت تو خود اکسل ایجاد کنم ( نه از طریف اکسس ) که یه سری محاسبات ماکرو اکسل رو انجام بدم. ولی با هر با اکسپورت کردن تیبل اکسس فایل اکسل دوباره بازنویسی می شه و فقط یعه شیت بهم میده.
ممنون میشم اگه دوستان کمک کنند.

مهدی قربانی
سه شنبه 07 اسفند 1386, 11:50 صبح
سلام
دوست گرامی در این مورد جستجو بفرمائید مباحث و مثالهای متعددی توسط دوستان قرار داده شده می تونید ایده بگیرید .

amiry54321
سه شنبه 07 اسفند 1386, 15:13 عصر
http://barnamenevis.org/forum/showthread.php?t=84274
http://barnamenevis.org/forum/showthread.php?t=59052
http://barnamenevis.org/forum/showthread.php?t=47169

jaberian2
سه شنبه 07 اسفند 1386, 16:05 عصر
دوستان عزیز متشکرم از راهنمای هاتون. تونستم با یه کمی کلنجار مشکلمو حل کنم . الان به یه مشکل دیگه برخورد کردم. جداول و تونستم به اکسل بفرستم و آپدیت کنم . Query رو هم فرستادم ولی نمی تونم آپدیتش کنم .ممنون میشم راهنمائیم کنید.

smderfan
سه شنبه 07 اسفند 1386, 16:42 عصر
با تشکر از مهدی عزیز
کد رو امتحان کردم که باید اندک تغییرتی روی اون انجام بشه.


For I = 1 To objRST.RecordCount
xlSheet.Range("a" & I + 1).Value = I
Next I

jaberian2
سه شنبه 07 اسفند 1386, 16:54 عصر
سرچ کردم ولی چیزی در خصوص سئوالم پیدا نکردم . ممنون میشم اگه راهنمائیم کنید.

smderfan
سه شنبه 07 اسفند 1386, 17:20 عصر
دوستان عزیز متشکرم از راهنمای هاتون. تونستم با یه کمی کلنجار مشکلمو حل کنم . الان به یه مشکل دیگه برخورد کردم. جداول و تونستم به اکسل بفرستم و آپدیت کنم . Query رو هم فرستادم ولی نمی تونم آپدیتش کنم .ممنون میشم راهنمائیم کنید.

سلام
این هم کدی برای آپدیت شدن :

Dim rs As DAO.Recordset

Dim Xl As Excel.Application
Dim XlBook As Excel.Workbook
Dim XlSheet As Excel.Worksheet

Dim iCols As Integer
strQueryName = "Query1"
Set objRST = Application.CurrentDb.OpenRecordset(strQueryName)

'Define and open Excel Template
Set Xl = CreateObject("Excel.Application")
Set XlBook = GetObject("C:\SomeExcelFile.xls")
Xl.Visible = True
XlBook.Windows(1).Visible = True
Set XlSheet = XlBook.Worksheets(1)

With XlSheet
.Range("B3").CopyFromRecordset objRST
.Name = Left(strQueryName, 31)
End With
'
For I = 1 To objRST.RecordCount
XlSheet.Range("A" & 2 + I).Value = I
Next I
'
XlBook.Save
Set rs = Nothing
Set Xl = Nothing
Set XlBook = Nothing
Set XlSheet = Nothing

مهدی قربانی
سه شنبه 07 اسفند 1386, 17:21 عصر
کد رو امتحان کردم که باید اندک تغییرتی روی اون انجام بشه.
سلام
من امتحان کردم جواب می ده . شما تست کردی مشکلش دقیقاً چی بود ؟

jaberian2
سه شنبه 07 اسفند 1386, 17:31 عصر
منم تست کردم مشکل داره . حداقل اینکه تعریف متغیر رو اکسس نمی پذیره و فکر هم نمیکنم درست باشه.

مهدی قربانی
سه شنبه 07 اسفند 1386, 17:41 عصر
منم تست کردم مشکل داره . حداقل اینکه تعریف متغیر رو اکسس نمی پذیره و فکر هم نمیکنم درست باشه.
خوب اون بخاطر اینه که شما در VBA قسمت References تیک Micrrosoft Excel 11.0 Object Library رو فعال نکردید اگر فعال کنید خطایی که اشاره کردید صادر نمی شه .

jaberian2
سه شنبه 07 اسفند 1386, 17:59 عصر
مهدی جان سلام تستش کردم خوب بود فقط ردیف میندازه که من قسمت FOR رو کامنت کردم اما یه ستون اضافه ایجاد مینکه و با عناوین ستون ها منطبق نیست. البته یکی دو بار تغییرات تو کوئیریم ایجاد کردم و آپدیت کردم ولی ظاهرا" جواب نداد.

smderfan
سه شنبه 07 اسفند 1386, 18:06 عصر
سلام
من امتحان کردم جواب می ده . شما تست کردی مشکلش دقیقاً چی بود ؟

سلام
فقط اینکه رنج رو A1 قرار داده بودید و تغییرات فقط در A1 ذخیره می شد.

smderfan
سه شنبه 07 اسفند 1386, 18:08 عصر
سلام
خسته نباشید
من از خروجی اکسس به اکسل در مورد کوئری هایی که کروس تب هستند استفاده می کنم.
یک مشکل اصلی این هست اگر فیلدی خالی باشه به همون صورت در اکسل نمایش داده می شه می خوام تعریف بشه که در زمان قرار دادن فیلدها در اکسل؛ فیلدهایی که NULL هست رو صفر قرار بده.

مهدی قربانی
سه شنبه 07 اسفند 1386, 18:30 عصر
سلام
فقط اینکه رنج رو A1 قرار داده بودید و تغییرات فقط در A1 ذخیره می شد.
من وقتی اجرا می کنم میره یه ستون جدید در ستون A‌ میسازه بعد تیتر رو در A1 ردیف قرار میده و از A2 به بعد اقدام شماره گذاری از 1 تا تعداد تعیین شده می کنه .

مهدی قربانی
سه شنبه 07 اسفند 1386, 18:51 عصر
مهدی جان سلام تستش کردم خوب بود فقط ردیف میندازه که من قسمت FOR رو کامنت کردم اما یه ستون اضافه ایجاد مینکه و با عناوین ستون ها منطبق نیست. البته یکی دو بار تغییرات تو کوئیریم ایجاد کردم و آپدیت کردم ولی ظاهرا" جواب نداد.
شما این خط رو هم کامنت کردید یا نه؟ اون قسمتی که یه ستون اضافه می کنه مربوط به این خطه :

xlSheet.Cells(1, 1).Value = "ردیف"

smderfan
چهارشنبه 08 اسفند 1386, 11:17 صبح
سلام
خسته نباشید
من از خروجی اکسس به اکسل در مورد کوئری هایی که کروس تب هستند استفاده می کنم.
یک مشکل اصلی این هست اگر فیلدی خالی باشه به همون صورت در اکسل نمایش داده می شه می خوام تعریف بشه که در زمان قرار دادن فیلدها در اکسل؛ فیلدهایی که NULL هست رو صفر قرار بده.

کسی از دوستان پیشنهادی نداره....

jaberian2
چهارشنبه 08 اسفند 1386, 16:15 عصر
متشکرم، تونستم مشکلو حل کنم.

مهدی قربانی
چهارشنبه 08 اسفند 1386, 17:23 عصر
کسی از دوستان پیشنهادی نداره....
سلام
این کار رو انجام بده ببین جواب میگیری ؟
تو Query1 در حالت Design هر فیلدی که میخوای در صورت خالی بودن رکوردی مقدار صفر رو نمایش بده در قسمت Field یه چیزی شبیه این بنویس :

Expr1: nz([FieldName];0)در قسمت Table اسم جدول رو حذف کن اینطوری رکوردهایی که در اون فیلد خالی هستن مقدار صفر می گیرن .

smderfan
چهارشنبه 08 اسفند 1386, 18:45 عصر
سلام
این کار رو انجام بده ببین جواب میگیری ؟
تو Query1 در حالت Design هر فیلدی که میخوای در صورت خالی بودن رکوردی مقدار صفر رو نمایش بده در قسمت Field یه چیزی شبیه این بنویس :

Expr1: nz([FieldName];0)در قسمت Table اسم جدول رو حذف کن اینطوری رکوردهایی که در اون فیلد خالی هستن مقدار صفر می گیرن .

سلام و با تشکر
آخه یه مشکل هست و اینکه کوئری من از نوع کروس تب هست و ستونهای اون متغییره کجا قرارش بدم.

مهدی قربانی
چهارشنبه 08 اسفند 1386, 18:52 عصر
نمونه فایلتو اینجا بذار روش کار کنیم .

smderfan
چهارشنبه 08 اسفند 1386, 19:04 عصر
این هم نمونه .....

مهدی قربانی
دوشنبه 20 اسفند 1386, 15:12 عصر
سلام
آقا روی نمونه یه کارایی کردم توضیحات در خلال کدها داده شده ، ببین چطوره .